iT邦幫忙

2022 iThome 鐵人賽

DAY 6
0

上一篇講完了簡單的 Dockerfile 用法,接著就要來講一下比較深入的用法了。

首先先來看一下常用的 Dockerfile 指令

Keyword Discription
FROM <image_name>[:<image_tag>] 基礎映像。
COPY <src> <dest> 複製。規則需符合 Go 的 filepath.Match。
ADD 同 COPY,但複製 tar 壓縮文件時會自動解壓。同需求下推薦用 COPY
RUN <command> orRUN ["command", "arg1", "arg2", ...] 執行。在 Dockerfile build 時執行。
*CMD 類似 RUN 。但在 docker run 時執行,且有多行時只會執行最後一行。如果啟動時有指定其他指令會被忽略。
*ENTRYPOINT 類似 CMD 。但一定會被執行。
WORKDIR <dir_name> 設定工作目錄。建立的工作目錄會存在於每一層。如果不存在會自動建立。
EXPOSE <port_number> 開放 PORT。僅宣告,要連進該服務需使用 publish。
ENV <key>=<value> 環境變數。
ARG 類似 ENV 。但僅在 dockerfile 作用。

* 如果有多行同時存在時,只會執行最後一行。

  1. Dockerfile 撰寫規則中規定必須包含至少 1 個 CMD 或 ENTRYPOINT 在內(但沒有好像也不會怎樣)。
  2. Dockerfile 的指令每執行一次都會在 docker 上新建一層 (Layer)。所以過多無意義的層,會造成 Image 膨脹過大。
  3. 最多到 127 層 (Layer)

接著我們一一介紹各個指令的用途吧。

第一個 FROM 昨天介紹過了,就是指定接下來的開發環境。

第二個 COPY 跟第三個 ADD 作用都是將檔案或資料夾複製到 Image 內,不過如果複製的檔案是 tar 的壓縮文件時, ADD 會自動解壓縮後再複製進去。官方文件中推薦如果沒有特殊需求建議使用 COPY 。

第四個 RUN 昨天也已經介紹過了,作用是在 Image 建立的過程中處裡某些東西,例如安裝套件或是其他的操作。

第五個 CMD 跟第六個 ENTRYPOINT 都是在啟動 Container 時才會執行的指令,

第七個 WORKDIR 昨天也介紹過了,就是指定接下來的工作目錄。

第八個 EXPOSE 昨天也介紹過了,就是宣告要開放的 PORT 。

第九個 ENV 跟第十個 ARG 都是用於設定環境變數,不過有點差別,我們先來看看個別作用個區域。

上面這張圖很清楚的標示了 ARG 跟 ENV 作用的區域, ARG 主要是在 Image 建立過程中使用的環境變數,大概就是安裝套件時用來指定版本使用; ENV 則是執行時所需使用的環境變數。

那麼就先到這邊, Dockerfile 的基本使用大概就是這樣, Dockerfile 超過一半以上都是在使用這些指令,只要使用熟悉,就可以順利地建構出各種 Image 了。

大家掰~掰~


上一篇
Day 05 DockerFile - 1
下一篇
Day 07 Docker Volume
系列文
30天漫遊雲端之旅 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言